/* Copyright 203-2115 AtomWare Technology Pty Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * The flowing information must be keep 
 * UpdatePropsInterceptor.java
 * wholebasic
 * 2014年5月21日上午11:34:51
 * @author 屈甲康
 * QQ285799123
 * mailto:qujiakang@gmail.com
 */

package org.jackysoft.interceptor;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jackysoft.annotations.ActionRequestMethod;
import org.jackysoft.annotations.MethodInceptor;
import org.springframework.web.servlet.ModelAndView;

import com.google.common.base.Splitter;

@MethodInceptor(method = ActionRequestMethod.updateprops)
public class UpdatePropsInterceptor extends AbstractInterceptor {

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

		String pval = (String) modelAndView.getModelMap().get("props");

		Map<String, String> propMap = new HashMap<>();
		Iterable<String> vals = Splitter.on(",").split(pval);
		for (String sval : vals) {
			Iterable<String> valkv = Splitter.on(";").split(sval);
			int i = 0;
			String keyStr = null;
			for (String key : valkv) {
				if ((i++) % 2 == 0) {
					keyStr = key;
					continue;
				}
				propMap.put(keyStr, key);
			}
		}
		logger.info(propMap);
		Method method = service.getClass().getMethod("update", String.class,
				Map.class);
		String keyId = (String) modelAndView.getModelMap().get("id");
		method.invoke(service, keyId, propMap);

	}

}
